我很难确定要使用的布局.帮助任何建议.

JPanel mainpanel = new JPanel();
public void addPanel(JPanel panel){
mainpanel.add(panel);
}
addPanel(A);
addPanel(B);
addPanel(C);
addPanel(D);
addPanel(E);
....
Run Code Online (Sandbox Code Playgroud)
面板A,B,C,D ......的尺寸不固定.
我怎样才能做到这一点?
我在代码中生成一些JComponents并使用GridBag布局来排列它们.我的布局由12行和3列组成,每行包含一个JSlider,一个JCheckBox和一个JLabel.这是我用来生成UI的代码:
final int NUM_MOTORS = 12;
// This is the panel I'm adding the components to.
pnlMotorSliders.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
for (int i = 0; i < NUM_MOTORS; ++i) {
c.gridy = i;
// Create the slider
JSlider slider = new JSlider(SwingConstants.HORIZONTAL, 10, 4085, 10);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.weightx = 0.9;
pnlMotorSliders.add(slider, c);
// Create the checkbox
JCheckBox checkBox = new JCheckBox();
checkBox.setOpaque(true);
checkBox.setBackground(Color.blue);
c.fill = GridBagConstraints.NONE;
c.gridx = 1;
c.weightx = 0.1;
pnlMotorSliders.add(checkBox, …Run Code Online (Sandbox Code Playgroud) 我只是学习Swing,并为自己构建了一个示例GUI作为练习.非常基本的,它在西侧,中间和东侧有三个面板JFrame.在最后一个面板中,有另一个面板和一个按钮.该小组是我的扩展JPanel,DrawPanel.Rectangle每次单击Repaint下面的按钮时,它会随机绘制.这是我的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Tester
{
public static DrawPanel panelEastDrawPanelCenter;
public static void main()
{
Tester gui = new Tester();
gui.go();
}
public void go()
{
JFrame frame = new JFrame("This is the title");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create all the Western Panel components
JPanel panelWest = new JPanel();
// panelWest.setLayout(new BorderLayout());
JButton panelWestButtonWest = new JButton("Western-most West Button");
JButton panelWestButtonCenter = new JButton("Western-most Center …Run Code Online (Sandbox Code Playgroud) 我正在做一些练习来理解Java和Swing API.为什么在Disegno构造函数中有nullPointerException?我想打印两个矩形的坐标,但它们似乎没有初始化.
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Disegno extends JFrame{
Disegno(){
this.setSize(500, 500);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
MyPanel aba = new MyPanel();
this.setContentPane(aba);
this.setVisible(true);
System.out.println(aba.rect.blue.x + "-" + aba.rect.blue.y);
System.out.println(aba.rect.yellow.x + "-" + aba.rect.yellow.y);
}
public static void main(String[] args){
new Disegno();
}
}
class MyPanel extends JPanel{
JPanel up, down;
RectArea rect;
MyPanel(){
this.setLayout(new BorderLayout());
up = new JPanel();
this.add(up, BorderLayout.NORTH);
up.setBackground(Color.red);
up.setVisible(true);
down = new JPanel();
down.setBackground(Color.green);
this.add(down, BorderLayout.SOUTH);
down.setVisible(true);
rect = new RectArea();
this.add(rect, BorderLayout.CENTER);
this.setVisible(true);
} …Run Code Online (Sandbox Code Playgroud) 我有一段时间没有使用MiGLayout,我不记得如何删除组件之间自动放入的空间.我尝试使用以下参数无效(请注意,我想保持水平间距):
novisualpadding
垫0
插图0
growy
这是我的意思的一个例子:

我想要的是将行分为两个.所以第一个和第二个JTextFields行之间不应该有间隙.不过,我想保持第二排和第三排之间的差距.我希望第三和第四行分组,它们之间没有任何间隙,等等.
这是我的布局代码的相关部分(这是在扩展JPanel的类中):
setLayout(new MigLayout("insets 0", "grow"));
//Code to create the JTextFields not shown as it is not relevant
for(int i = 0; i < textFields.length; ++i) {
for(int j = 0; j < textFields[0].length; ++j) {
textFields[i][j].setPreferredSize(new Dimension(80, 50));
if(j == 0 && i % 2 == 0) //If it's the first JTextField in an even row
add(textFields[i][j], "newline, split, gaptop 5, gapright 5");
else if(j == 0 && i % 2 != 0) …Run Code Online (Sandbox Code Playgroud) 我正在开发Java swing应用程序,并且正在动态添加组件JPanel。我想JScrollPane在此面板上设置a ,只有当面板满了时,我们才能看到此滚动窗格。
我该怎么做:
package add_button;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
public class MyExample
{
// Field members
static JPanel panel = new JPanel();
static Integer indexer = 1;
static List<JLabel> listOfLabels = new ArrayList<JLabel>();
static List<JTextField> listOfTextFields = new ArrayList<JTextField>();
public static void main(String[] args)
{
// Construct frame
JFrame frame = …Run Code Online (Sandbox Code Playgroud) 我有一个 JFrame,它根据您单击的 MenuItem 显示 JPanel。它可以工作,但是现在我需要在将 JPanel 添加到框架并显示它后调用一个方法(因为我在该面板内使用 JFreeChart 并且我必须chartPanel.repaint()在 JPanel 可见时调用):
this.getContentPane().add( myjpanel, BorderLayout.CENTER ); //this = JFrame
this.validate();
myjpanel.methodCalledOnceDisplayed();
Run Code Online (Sandbox Code Playgroud)
看起来没问题吗?真的myjpanel被展示了吗?好像不是:
public void methodCalledOnceDisplayed() {
chartPanel.repaint()
}
Run Code Online (Sandbox Code Playgroud)
这不起作用(chartPanel.getChartRenderingInfo().getPlotInfo().getSubplotInfo(0)正在抛出 IndexOutOfBoundsException)。这意味着调用重绘时 JPanel 不可见,我测试了以下内容:
public void methodCalledOnceDisplayed() {
JOptionPane.showMessageDialog(null,"You should see myjpanel now");
chartPanel.repaint()
}
Run Code Online (Sandbox Code Playgroud)
现在它起作用了,我myjpanel在警报后面看到了,正如预期的那样,重新绘制了 chartPanel 并且没有发生异常。
编辑:SSCCE(需要 jfreechart 和 jcommon:http ://www.jfree.org/jfreechart/download.html )
导入 java.awt.BorderLayout; 导入 java.awt.EventQueue; 导入 java.awt.Font; 导入 javax.swing.JButton; 导入 javax.swing.JFrame; 导入 javax.swing.JLabel; 导入 javax.swing.JOptionPane; 导入 javax.swing.JPanel; 导入 javax.swing.border.EmptyBorder; 导入 …
我遇到了GridLayout的问题,并且整个JPanel没有被填充.我有一个N*M网格,我用N*M Tiles填充它(它们扩展了JPanel).添加所有这些图块后,JPanel的底部和右侧仍有空间.我认为GridLayout应该填满整个JPanel,并使其中的所有内容均匀分布?
编辑:我不想发布所有代码,因为有多个类.想到也许有一个简单的解决方案.
public class MainFrame extends JFrame {
private static final long serialVersionUID = 3985493842977428355L;
private final int FRAME_HEIGHT = 800;
private final int FRAME_WIDTH = 700;
private MainPanel mainPanel;
public MainFrame() {
super("Test");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(FRAME_HEIGHT, FRAME_WIDTH);
setLocationRelativeTo(null);
mainPanel = new MainPanel();
getContentPane().add(mainPanel);
setVisible(true);
}
}
public class MainPanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = 3421071253693531472L;
private RoutePanel routePanel;
private ControlPanel controlPanel;
private GridBagConstraints gridBagConstraints;
private GridBagLayout gridBagLayout;
public MainPanel() {
routePanel = …Run Code Online (Sandbox Code Playgroud) 我有使用问题JTextArea.我的实际设置不同,但效果仍然存在.这是问题的图像:

拥有的JDialog大小仅比JTextArea其首选大小所需的大约1个像素的那一刻,文本区域突然调整大小.在我的实际设置中,它们突然长高.我正在使用a GridBagLayout,但它似乎发生在其他布局中.为什么是这样?
以下是重现上述效果的易于编译的代码.
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;
import javax.swing.text.JTextComponent;
public class TextDemo extends JDialog implements ActionListener {
private static final long serialVersionUID = -589374238138963529L;
protected JTextField textField;
protected JTextArea textArea;
private final static String newline = "\n";
private static final java.awt.Dimension SCREENSIZE =
java.awt.Toolkit.getDefaultToolkit().getScreenSize();
private static final java.awt.Point SCREENCENTER =
new java.awt.Point(SCREENSIZE.width/2,SCREENSIZE.height/2);
public TextDemo(Window owner, String shortMessage, String message, JComponent accessory) {
super(owner);
setTitle("Test");
setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
Icon …Run Code Online (Sandbox Code Playgroud) 首先,我必须说我已经检查了这些问题,但没有找到我的答案:
还有很多其他问题
我也检查了这些教程和示例:
和许多其他网站.但我无法解决我的问题.
这是我的代码的简单类型:
public class Question extends JFrame {
public Question() {
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setLayout(new BorderLayout());
setSize(d.width, d.height);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(d.width, d.height));
panel.setBorder(BorderFactory.createLineBorder(Color.red));
panel.setLayout(new BoxLayout(panel, 1));
for (int i = 0; i < 100; i++) {
panel.add(new JButton("kjdh"));
}
JScrollPane scrollPane = new JScrollPane(panel);
scrollPane.setPreferredSize(new Dimension(500, 500));
getContentPane().add(scrollPane);
getContentPane().add(panel);
setVisible(true); …Run Code Online (Sandbox Code Playgroud) java ×10
swing ×10
jpanel ×3
jscrollpane ×2
layout ×2
concurrency ×1
jframe ×1
jfreechart ×1
jlabel ×1
jtextarea ×1
miglayout ×1
resize ×1