嵌套的 BoxLayout 不起作用?
Nested BoxLayout not working?
我创建了两个 java classes,其中一个是我的主要 class main.java
,另一个是辅助 class,它创建了一个面板,其中包含一些添加组件 CPanel.java
。我的应用程序布局如下:
Main class 使用 BoxLayout 创建一个主面板并在顶部添加一个工具栏,然后创建一个 CPanel 对象(一个添加了组件的面板)并将其添加到主面板。 CPanel 对象的组件也有 BoxLayout。问题是,CPanel 面板没有合并 BoxLayout,而是坚持流式布局。这是我的 classes..
的代码
public class MainFile extends JFrame {
private JToolBar navbar ;
private JButton backBtn, forwardBtn, homeBtn ;
private CPanel content ;
private static JPanel app = new JPanel() ;
public MainFile(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
navbar = new JToolBar() ;
navbar.setMaximumSize(new Dimension(1000, 50));
setSize(500, 800) ;
app.setLayout(new BoxLayout(app, BoxLayout.PAGE_AXIS));
app.add(navbar , BorderLayout.NORTH ) ;
ImageIcon leftButtonIcon = createImageIcon("images/right.gif");
ImageIcon middleButtonIcon = createImageIcon("images/middle.gif");
ImageIcon rightButtonIcon = createImageIcon("images/left.gif");
backBtn = new JButton(leftButtonIcon) ;
forwardBtn = new JButton(rightButtonIcon) ;
homeBtn = new JButton(middleButtonIcon) ;
navbar.add(forwardBtn) ;
navbar.add(Box.createGlue());
navbar.add(homeBtn) ;
navbar.add(Box.createGlue());
navbar.add(backBtn) ;
content = new CPanel() ;
app.add(content) ;
setContentPane(app) ;
}
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = MFrame.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
public static void showGUI(){
MFrame Reader = new MFrame() ;
//Reader.pack();
//Reader.setContentPane(app);
Reader.setVisible(true) ;
}
public static void main(String args[]){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
showGUI() ;
}
});
}
}
这是我的 CPanel Class
public class CPanel extends JPanel {
private JScrollPane scrollPane ;
private JPanel content ;
private JEditorPane demo ;
public CPanel(){
scrollPane = new JScrollPane() ;
content = new JPanel() ;
scrollPane.setViewportView(content);
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
try{
java.net.URL text = CPanel.class.getResource("demo.txt") ;
demo = new JEditorPane(text) ;
}catch(Exception e){
System.out.println("Something bad happened with the file") ;
}
add(demo) ;
JButton demob = new JButton("Button 1") ;
JButton demob2 = new JButton("Button 2") ;
add(demob) ;
add(demob2) ;
}
}
您似乎希望 CPanel
有一个 JScrollPane
,它作为 BoxLayout
的组件出现。您创建 JPanel
、设置其布局并将其添加到 JScrollPane
是正确的,但您仍然需要将 JScrollPane
添加到 CPanel
以及按钮和 demo
到 content
public class CPanel extends JPanel {
private JScrollPane scrollPane ;
private JPanel content ;
private JEditorPane demo ;
public CPanel(){
scrollPane = new JScrollPane() ;
content = new JPanel() ;
scrollPane.setViewportView(content);
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
try{
java.net.URL text = CPanel.class.getResource("demo.txt") ;
demo = new JEditorPane(text) ;
}catch(Exception e){
System.out.println("Something bad happened with the file") ;
}
//These need to be added to the contentpanel
content.add(demo) ;
JButton demob = new JButton("Button 1") ;
JButton demob2 = new JButton("Button 2") ;
content.add(demob) ;
content.add(demob2) ;
//Here we need to add the scrollPane, to which the JPanel
//with BoxLayout has been added
this.setLayout(new BorderLayout());
this.add(scrollPane, BorderLayout.CENTER);
}
}
我创建了两个 java classes,其中一个是我的主要 class main.java
,另一个是辅助 class,它创建了一个面板,其中包含一些添加组件 CPanel.java
。我的应用程序布局如下:
Main class 使用 BoxLayout 创建一个主面板并在顶部添加一个工具栏,然后创建一个 CPanel 对象(一个添加了组件的面板)并将其添加到主面板。 CPanel 对象的组件也有 BoxLayout。问题是,CPanel 面板没有合并 BoxLayout,而是坚持流式布局。这是我的 classes..
的代码
public class MainFile extends JFrame {
private JToolBar navbar ;
private JButton backBtn, forwardBtn, homeBtn ;
private CPanel content ;
private static JPanel app = new JPanel() ;
public MainFile(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
navbar = new JToolBar() ;
navbar.setMaximumSize(new Dimension(1000, 50));
setSize(500, 800) ;
app.setLayout(new BoxLayout(app, BoxLayout.PAGE_AXIS));
app.add(navbar , BorderLayout.NORTH ) ;
ImageIcon leftButtonIcon = createImageIcon("images/right.gif");
ImageIcon middleButtonIcon = createImageIcon("images/middle.gif");
ImageIcon rightButtonIcon = createImageIcon("images/left.gif");
backBtn = new JButton(leftButtonIcon) ;
forwardBtn = new JButton(rightButtonIcon) ;
homeBtn = new JButton(middleButtonIcon) ;
navbar.add(forwardBtn) ;
navbar.add(Box.createGlue());
navbar.add(homeBtn) ;
navbar.add(Box.createGlue());
navbar.add(backBtn) ;
content = new CPanel() ;
app.add(content) ;
setContentPane(app) ;
}
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = MFrame.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
public static void showGUI(){
MFrame Reader = new MFrame() ;
//Reader.pack();
//Reader.setContentPane(app);
Reader.setVisible(true) ;
}
public static void main(String args[]){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
showGUI() ;
}
});
}
}
这是我的 CPanel Class
public class CPanel extends JPanel {
private JScrollPane scrollPane ;
private JPanel content ;
private JEditorPane demo ;
public CPanel(){
scrollPane = new JScrollPane() ;
content = new JPanel() ;
scrollPane.setViewportView(content);
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
try{
java.net.URL text = CPanel.class.getResource("demo.txt") ;
demo = new JEditorPane(text) ;
}catch(Exception e){
System.out.println("Something bad happened with the file") ;
}
add(demo) ;
JButton demob = new JButton("Button 1") ;
JButton demob2 = new JButton("Button 2") ;
add(demob) ;
add(demob2) ;
}
}
您似乎希望 CPanel
有一个 JScrollPane
,它作为 BoxLayout
的组件出现。您创建 JPanel
、设置其布局并将其添加到 JScrollPane
是正确的,但您仍然需要将 JScrollPane
添加到 CPanel
以及按钮和 demo
到 content
public class CPanel extends JPanel {
private JScrollPane scrollPane ;
private JPanel content ;
private JEditorPane demo ;
public CPanel(){
scrollPane = new JScrollPane() ;
content = new JPanel() ;
scrollPane.setViewportView(content);
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
try{
java.net.URL text = CPanel.class.getResource("demo.txt") ;
demo = new JEditorPane(text) ;
}catch(Exception e){
System.out.println("Something bad happened with the file") ;
}
//These need to be added to the contentpanel
content.add(demo) ;
JButton demob = new JButton("Button 1") ;
JButton demob2 = new JButton("Button 2") ;
content.add(demob) ;
content.add(demob2) ;
//Here we need to add the scrollPane, to which the JPanel
//with BoxLayout has been added
this.setLayout(new BorderLayout());
this.add(scrollPane, BorderLayout.CENTER);
}
}