使用JPanels / JFrames显示?

时间:2013-11-19 21:38:24

标签: java swing dreamweaver flowlayout

我已完成代码,但仍无法获得我正在为之努力的目标。 我目前的代码显示了这一点:

enter image description here

使用此代码:

/*
 */
package reader;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
//import java.lang.Process;


/**
 */
class readerGUI extends JFrame 
{
    JMenuBar menuBar; 
    JMenu menu1, menu2, menu3, menu4;
    JMenuItem menuItem, menuItem1, menuItem2, menuItem3, menuItem4;
    ImageIcon logo;
    JLabel loguin1, loguin2, title;
    JTextArea readerArea;
    JPanel rightSide, leftSide, bottomSide, middleSide;
    String text;
    JButton importBook, removeBook, listBook, searchBook;
    JTextField searchField;


    readerGUI()
    { 
        super("Text \n");       
        String cad = "logo.png";
        //setBackground(Color.blue);
        setLayout(new FlowLayout());


        menuBar = new JMenuBar(); 
title = new JLabel(" Text ");
        add(title);

        menu1 = new JMenu("Link");  
        menuItem = new JMenuItem("Option"); 
        menu2 = new JMenu("Link");
        menuItem1 = new JMenuItem("Option In");
        menuItem2 = new JMenuItem("Option Out");    
        menu3 = new JMenu("Link");
        menuItem3 = new JMenuItem("Option");
        menuBar.add(menu1);
        menuBar.add(menu2);
        menuBar.add(menu3);
        menu1.add(menuItem);
        menu2.add(menuItem1);
        menu2.add(menuItem2);
        menu3.add(menuItem3);
        add(menuBar);



        logo = new ImageIcon(cad);//create icon
        loguin1 = new JLabel(logo);//create label
        loguin2 = new JLabel(logo);//create label
        //loguin.setBounds(150,30,100,100);//where?
        add(loguin1); //add
        add(loguin2);

        rightSide = new JPanel(); //PANEL for buttons  
                rightSide.add(new JLabel("Text:"));
                DefaultComboBoxModel model = new DefaultComboBoxModel();
                model.addElement("Text1");
                model.addElement("Text2");
                model.addElement("Text3");
                JComboBox comboBox = new JComboBox(model);
                rightSide.add(comboBox);

                searchField = new JTextField("", 10);
                rightSide.add(searchField);
                searchBook = new JButton("Search");
                rightSide.add(searchBook);
                add(rightSide);


                text = "\n\t\t LORE IPSUM \n\n"
                        + "commodo nisi. In hac habitasse platea dictumst.\n";

         middleSide = new JPanel(); //PANEL for buttons  



                add(middleSide);

                SimpleAttributeSet sas = new SimpleAttributeSet();
                StyleConstants.setBackground(sas, Color.RED);
                StyledDocument doc;



/* --------- SIDE Menu Panel for Options ----------*/   
        title = new JLabel("Options ");
        add(title);
                leftSide = new JPanel(); //PANEL for buttons  
                importBook = new JButton("Button1");
                leftSide.add(importBook);
                removeBook = new JButton("Button2");
                leftSide.add(removeBook);
                add(leftSide);
        JPanel main = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        JPanel child = new JPanel();
        child.add(new JLabel("Options \n"));
        //main.add(child);

        main.add(leftSide);
        add(main); 


        ActionEventHandler manejador = new ActionEventHandler();

        menuItem.addActionListener(manejador);

    }

      private class ActionEventHandler implements ActionListener
        {
                @Override
                public void actionPerformed( ActionEvent evento)
                {

                        if (evento.getSource() == menuItem)
                                System.exit(0);
                }


      }

}

并希望我的代码能够显示以下内容:

enter image description here

我知道我离它不是很远,但我对JPanels和JFrames感到困惑..帮助?

1 个答案:

答案 0 :(得分:1)

一般来说,在这种情况下,FlowLayout可能不是布局管理器的最佳选择。

通过将每个区域分成不同的组件,您已经有了一个良好的开端,但您也应该关注它们的布局要求。

首先,我将基本布局视为BorderLayout。这样您就可以将“标题”放在BorderLayout.NORTH位置,将“菜单”放在BorderLayout.WEST位置,将内容放入BorderLayout.CENTER位置

enter image description here

对于标题,我看到GridBagLayout的使用,因为这将允许您给“标题”更多的权重(空格),然后是其他组件。

enter image description here

菜单稍微复杂一点,您可以使用GridBagLayout执行此操作,或者通过将“菜单选项”与按钮分开(在单独的容器中),使用BorderLayout作为基础(在BorderLayout.NORTH中放置“菜单选项”,在BorderLayout.CENTER位置放置按钮)并使用类似GridLayout的按钮作为按钮,例如......

enter image description here

对于“主要内容”,您可以根据需要使用GridLayoutGridBagLayout

enter image description here

查看Laying Out Components Within a Container以获取更多想法......