我已完成代码,但仍无法获得我正在为之努力的目标。 我目前的代码显示了这一点:
使用此代码:
/*
*/
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);
}
}
}
并希望我的代码能够显示以下内容:
我知道我离它不是很远,但我对JPanels和JFrames感到困惑..帮助?
答案 0 :(得分:1)
一般来说,在这种情况下,FlowLayout
可能不是布局管理器的最佳选择。
通过将每个区域分成不同的组件,您已经有了一个良好的开端,但您也应该关注它们的布局要求。
首先,我将基本布局视为BorderLayout
。这样您就可以将“标题”放在BorderLayout.NORTH
位置,将“菜单”放在BorderLayout.WEST
位置,将内容放入BorderLayout.CENTER
位置
对于标题,我看到GridBagLayout
的使用,因为这将允许您给“标题”更多的权重(空格),然后是其他组件。
菜单稍微复杂一点,您可以使用GridBagLayout
执行此操作,或者通过将“菜单选项”与按钮分开(在单独的容器中),使用BorderLayout
作为基础(在BorderLayout.NORTH
中放置“菜单选项”,在BorderLayout.CENTER
位置放置按钮)并使用类似GridLayout
的按钮作为按钮,例如......
对于“主要内容”,您可以根据需要使用GridLayout
或GridBagLayout
查看Laying Out Components Within a Container以获取更多想法......