我有这门课:
package com.erikbalen.game.rpg;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Gui extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = -384241835772507459L;
JLabel playerInfo;
JTextField textField;
private final static String newline = "\n";
JTextArea feed;
JScrollPane scrollPane;
Player player;
public Gui() {
super("Erik's RPG");
//setLayout(new FlowLayout());
Container contentPane = this.getContentPane();
contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.PAGE_AXIS));
textField = new JTextField(30);
textField.addActionListener(this);
feed = new JTextArea(15, 30);
feed.setEditable(false);
scrollPane = new JScrollPane(feed);
}
Run Code Online (Sandbox Code Playgroud)
当你运行它时,它会使textField真的很高,如果我扩展它,即使我只希望它是一定的高度.我怎么能够
我想在JPanel中垂直堆叠一些JComponents,因此它们堆叠在顶部,任何额外的空间都在底部.我正在使用BoxLayout.每个组件都包含一个JTextArea,它应该允许文本在必要时包装.所以,基本上,我希望每个组件的高度是显示(可能包装的)文本所需的最小值.
这是我正在做的事情的包含代码示例:
import javax.swing.*;
import java.awt.*;
public class TextAreaTester {
public static void main(String[] args){
new TextAreaTester();
}
public TextAreaTester(){
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel,BoxLayout.PAGE_AXIS));
panel.setPreferredSize(new Dimension(100,400));
for(int i = 0; i<3; i++){
JPanel item = new JPanel(new BorderLayout());
JTextArea textarea = new JTextArea("this is a line of text I want to wrap if necessary");
textarea.setWrapStyleWord(true);
textarea.setLineWrap(true);
textarea.setMaximumSize( textarea.getPreferredSize() );
item.add(textarea,BorderLayout.NORTH);
panel.add(item);
}
panel.add(Box.createGlue());
frame.add(panel);
frame.setVisible(true);
frame.pack();
}
}
Run Code Online (Sandbox Code Playgroud)
孩子JPanels正在扩大以填补垂直空间.我尝试使用胶水,因为我认为这是什么胶水,但它似乎什么都不做.有帮助吗?
注意:我发现问题看起来几乎相同,但没有我可以应用的答案.
我有以下表单,它使用行垂直BoxLayout和FlowLayout JPanels:

如何使每行之间的巨大差距变小?这是我的代码:
x_axis和line_axis都是从左到右排列组件.那么它们之间的区别是什么?
这个问题来自Java Swing boxlayout布局管理器.
我正在尝试在另一个JPanel中设置Jlay的Boxlayout.但我无法弄清楚如何解决这个错误
Exception in thread "main" java.awt.AWTError: BoxLayout can't be shared
at javax.swing.BoxLayout.checkContainer(BoxLayout.java:464)
at javax.swing.BoxLayout.invalidateLayout(BoxLayout.java:248)
at javax.swing.BoxLayout.addLayoutComponent(BoxLayout.java:281)
at java.awt.Container.addImpl(Container.java:1120)
at java.awt.Container.add(Container.java:410)
at chatmsg1.ProfilePanel.<init>(ProfilePanel.java:63)
at chatmsg1.ProfilePanel.main(ProfilePanel.java:108)
Java Result: 1
Run Code Online (Sandbox Code Playgroud)
这是守则!任何帮助将不胜感激 !!
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.management.ImmutableDescriptor;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
class ProfilePanel extends JPanel{
JLabel jl1,jl2,jl3,jl4,jl5,jl6,jl7,jl8,jl9,jl10;
ImagePanel ip= new ImagePanel();
JPanel jp1= new JPanel(new BorderLayout());
JPanel labelpanel;
static int textwidth=100;
static String uname, uage, usex, udept, uheight="jjhkjhiuhiuhiuhiuhihihuihiuhiuhuhiuhiuhihihiuhhihhuhih",ubatch, ucontact, uemail;
public ProfilePanel() {
this.labelpanel …Run Code Online (Sandbox Code Playgroud) 我已经完美地设置了菜单(中心框),但我不知道如何放置标签。目前发生的情况是标签位于菜单选项下方,并且菜单选项被推到右侧。
这是我想要发生的事情:

这是正在发生的事情:

目前我的盒子集中在:
this.setAlignmentX(Component.CENTER_ALIGNMENT);
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下方法对我的标签执行相同的操作:
this.setAlignmentX(Component.BOTTOM_ALIGNMENT);
this.setAlignmentY(Component.LEFT_ALIGNMENT);
Run Code Online (Sandbox Code Playgroud)
这什么也没做。
抱歉,这张图太糟糕了,我用 MS Paint 花了大约 20 秒就把它画出来了。
这是标签的重要部分
public Label(String text)
{
this.setHorizontalTextPosition(JLabel.CENTER);
this.setVerticalTextPosition(JLabel.CENTER);
this.setHorizontalAlignment(0);
}
Run Code Online (Sandbox Code Playgroud)
这是我创建盒子布局的地方:
pnlMain.setLayout(new BoxLayout(pnlMain, BoxLayout.Y_AXIS));
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的 JFrame 扩展类中的主要函数。功能之上只是面板、按钮和标签的创建。
public Window()
{
//Create the JFrame
super("Tank Trouble");
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
//Changes the frame size to your screen size
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) (dimension.getWidth());
int y = (int) (dimension.getHeight());
setSize(x,y);
setResizable(false);
//GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(this); //Makes the application go fullscreen
getContentPane().add(pnlMaster);
pnlMaster.add(pnlMenu, "Main Menu");
pnlMaster.add(pnlOptions, "Options");
pnlMaster.add(pnlGame, …Run Code Online (Sandbox Code Playgroud) 我想有我JFrame,有一个BoxLayout能够有一个滚动窗格,所以我可以刚在论坛加入一样,如果它是一个收据或发票打印机。有没有添加方法ScrollPane?
问题:如何将ScrollPane添加到JFrame?
代码,最初在这里看到:
import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.GroupLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
/** @see /sf/answers/595332741/ */
public class GroupPanel extends JPanel {
private static final long serialVersionUID = 1L;
private JLabel label1 = new JLabel("Primary:");
private JTextField field1 = new JTextField(16);
private JLabel label2 = new JLabel("Secondary:");
private JTextField field2 = new JTextField(16);
private JLabel label3 = new JLabel("Tertiary:");
private JTextField …Run Code Online (Sandbox Code Playgroud) 用图片来解释最容易,所以就在这里。这是它现在的样子:

我试图让所有 JButton 的大小相同,即完全垂直填充 BoxLayout。
这是我的代码:
public class TestarBara extends JFrame implements ActionListener{
JButton heyy;
public static void main(String[] args){
new TestarBara();
}
JPanel panel = new JPanel();
JPanel panel2 = new JPanel();
public TestarBara(){
super("knapparnshit");
panel.setLayout(new GridLayout(3,3,2,2));
for(int x=1; x < 10; x++){
String y = Integer.toString(x);
JButton button = new JButton(y);
button.addActionListener(this);
panel.add(button);
}
add(panel, BorderLayout.CENTER);
JButton b1 = new JButton("this");
JButton b2 = new JButton("does");
JButton b3 = new JButton("not");
JButton b4 = new JButton("work");
panel2.setLayout(new BoxLayout(panel2, …Run Code Online (Sandbox Code Playgroud) 我想创建具有困难级别的简单菜单
接下来的几行代码是构造函数。
super();
setMinimumSize(new Dimension(600, 300));
setMaximumSize(new Dimension(600, 300));
setPreferredSize(new Dimension(600, 300));
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
addButtons();
Run Code Online (Sandbox Code Playgroud)
方法addButtons()添加按钮,您可以在屏幕截图中看到:
add(Box.createVerticalGlue());
addLabel("<html>Current level <b>" + Game.instance()
.getLevelString() +
"</b></html>");
add(Box.createVerticalGlue());
addButton("Easy");
add(Box.createVerticalGlue());
addButton("Normal");
add(Box.createVerticalGlue());
addButton("Hard");
add(Box.createVerticalGlue());
addButton("Back");
add(Box.createVerticalGlue());
Run Code Online (Sandbox Code Playgroud)
方法addButton()
private void addButton(String text)
{
JButton button = new JButton(text);
button.setAlignmentX(JButton.CENTER_ALIGNMENT);
button.setFocusable(false);
add(button);
}
Run Code Online (Sandbox Code Playgroud)
和addLabel()
private void addLabel(String text)
{
JLabel label = new JLabel(text, JLabel.CENTER);
add(label);
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何将所有元素对齐到中心。这对我来说是个问题。另一个问题是,当我将困难级别文本更改JLabel为简单的“当前级别简单”时。然后JButtons向右移动很多像素,我不知道为什么。
我有一个带有 Y_Axis 约束的 JPanel,这样每当我添加一个新组件时,它都会自动添加到新行上。但问题是里面的标签没有左对齐或右对齐。它显示在 JTable 上方一定距离处。如何在所需的 Alginment 中显示 JLabel。
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
Run Code Online (Sandbox Code Playgroud)
然后我在面板内添加了一个 JLabel。
JLabel labelSemester = new JLabel("Semester 1: ",SwingConstants.LEFT);
panel.add(labelSemester);
Run Code Online (Sandbox Code Playgroud)
标签后,我在面板内添加了一个新的 JTable,
// Column Names for the Table
Object[] col_names = {"ID", "Name", "CH", "Marks", "Grade"};
// row data for the table
Object[][] table_rows = {{"CS123","Introduction to Computing",3,80,"A-"}};// One row only
JTable table = new JTable(table_rows, col_names);
panel.add(new JScrollPane(table));
Run Code Online (Sandbox Code Playgroud)
然后我添加了一个 JFrame 并添加了面板以显示在框架中
JFrame frame = new JFrame();
// frame Title
frame.setTitle("DMC");
frame.setSize(400,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true); …Run Code Online (Sandbox Code Playgroud)