Jbutton 定位在选项卡式窗格内
Jbutton positioning inside a tabbed pane
我目前正在制作数字学校规划器,并希望在 JTabbedPane 中使用多个 JButton。但是我目前遇到一个问题,即使一个按钮也会占据整个窗格,并且想要解决这个问题。
我创建了一个测试程序来反映我编写主程序的方式:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
public class tabTest extends JFrame {
private static final long serialVersionUID = 5101892517858668104L;
private JFrame frame;
private int WIDTH = 450;
private int HEIGHT = 600;
private JTabbedPane tab;
public tabTest() {
frame = new JFrame();
// frame.setUndecorated(true);
/****************************************************
* Set up frame
*****************************************************/
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(WIDTH, HEIGHT);
frame.setLocation(50, 50);
frame.getContentPane().setBackground(Color.GRAY);
frame.getContentPane().setLayout(null);
/******************************************************
* Set up Tabbed pane and buttons
******************************************************/
tab = new JTabbedPane();
tab.setBounds(20, 50, 400, 500);
tab.setBackground(Color.white);
tab.setFocusable(false);
JButton tabButton1 = new JButton("test");
tab.addTab("Week 1", tabButton1);
tab.addTab("Week 2", null);
tab.addTab("Week 3", null);
tab.addTab("Week 4", null);
frame.getContentPane().add(tab);
frame.setVisible(true);
}
public static void main(String[] args) {
new tabTest();
}
}
我已经尝试使用 BorderLayout.POSITION
并且它在错误之后抛出了错误任何替代解决方案都会很棒 :)
您的 tabbedPane 只能容纳一个 "object"。如果您添加一个按钮,则您的窗格已满。但是,您可以向窗格添加一个具有更多空间的容器。例如 JPanel。 JPanel 现在可以容纳任意数量的 "objects",并且可以使用它自己的 LayoutManager。
JPanel moreButtons = new JPanel();
moreButtons.add(new JButton("test1"));
moreButtons.add(new JButton("test2"));
moreButtons.add(new JButton("test3"));
moreButtons.add(new JButton("test4"));
tab.addTab("Week 1", moreButtons);
您还可以在构造函数中创建和初始化整个 GUI。定义像 initializeGUI()
这样的第二个方法来分离对象的创建和 GUI 的初始化可能会更清晰。您还应该使用 invokeLater
将 GUI 线程和主线程分开
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Gui g = new Gui();
g.initalizeGUI();
Gui.setVisible(true);
}
});
}
无需扩展 JFrame 并在 JFrame 中创建单独的 JFrame。删除 extends JFrame
或在 class 中创建 JFrame。您可以从扩展 class.
内部访问 JFrame 方法
public class MyFrame extends JFrame {
public MyFrame () {
/**
* Set up frame
*/
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(WIDTH, HEIGHT);
setLocation(50, 50);
getContentPane().setBackground(Color.GRAY);
getContentPane().setLayout(null);
}
}
在您的 JTabbedPane
中添加另一个容器,例如 JPanel
,如下所示:
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout()); // you can change layout according to your need.
p.add(tabButton1);
tab.addTab("Week 1", panel);
tab.addTab("Week 2", null);
tab.addTab("Week 3", null);
tab.addTab("Week 4", null);
将所有组件添加到要在选项卡上显示的 JPanel
。
我目前正在制作数字学校规划器,并希望在 JTabbedPane 中使用多个 JButton。但是我目前遇到一个问题,即使一个按钮也会占据整个窗格,并且想要解决这个问题。
我创建了一个测试程序来反映我编写主程序的方式:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
public class tabTest extends JFrame {
private static final long serialVersionUID = 5101892517858668104L;
private JFrame frame;
private int WIDTH = 450;
private int HEIGHT = 600;
private JTabbedPane tab;
public tabTest() {
frame = new JFrame();
// frame.setUndecorated(true);
/****************************************************
* Set up frame
*****************************************************/
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(WIDTH, HEIGHT);
frame.setLocation(50, 50);
frame.getContentPane().setBackground(Color.GRAY);
frame.getContentPane().setLayout(null);
/******************************************************
* Set up Tabbed pane and buttons
******************************************************/
tab = new JTabbedPane();
tab.setBounds(20, 50, 400, 500);
tab.setBackground(Color.white);
tab.setFocusable(false);
JButton tabButton1 = new JButton("test");
tab.addTab("Week 1", tabButton1);
tab.addTab("Week 2", null);
tab.addTab("Week 3", null);
tab.addTab("Week 4", null);
frame.getContentPane().add(tab);
frame.setVisible(true);
}
public static void main(String[] args) {
new tabTest();
}
}
我已经尝试使用 BorderLayout.POSITION
并且它在错误之后抛出了错误任何替代解决方案都会很棒 :)
您的 tabbedPane 只能容纳一个 "object"。如果您添加一个按钮,则您的窗格已满。但是,您可以向窗格添加一个具有更多空间的容器。例如 JPanel。 JPanel 现在可以容纳任意数量的 "objects",并且可以使用它自己的 LayoutManager。
JPanel moreButtons = new JPanel();
moreButtons.add(new JButton("test1"));
moreButtons.add(new JButton("test2"));
moreButtons.add(new JButton("test3"));
moreButtons.add(new JButton("test4"));
tab.addTab("Week 1", moreButtons);
您还可以在构造函数中创建和初始化整个 GUI。定义像 initializeGUI()
这样的第二个方法来分离对象的创建和 GUI 的初始化可能会更清晰。您还应该使用 invokeLater
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Gui g = new Gui();
g.initalizeGUI();
Gui.setVisible(true);
}
});
}
无需扩展 JFrame 并在 JFrame 中创建单独的 JFrame。删除 extends JFrame
或在 class 中创建 JFrame。您可以从扩展 class.
public class MyFrame extends JFrame {
public MyFrame () {
/**
* Set up frame
*/
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(WIDTH, HEIGHT);
setLocation(50, 50);
getContentPane().setBackground(Color.GRAY);
getContentPane().setLayout(null);
}
}
在您的 JTabbedPane
中添加另一个容器,例如 JPanel
,如下所示:
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout()); // you can change layout according to your need.
p.add(tabButton1);
tab.addTab("Week 1", panel);
tab.addTab("Week 2", null);
tab.addTab("Week 3", null);
tab.addTab("Week 4", null);
将所有组件添加到要在选项卡上显示的 JPanel
。