- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这可能是一个愚蠢的问题,可以通过更改我为此使用的布局来解决,但是,在运行我的计算器程序时,我很聪明,直到我发现我的文本区域大小不会拉伸(stretch)以适应它所在的 Pane 的大小,而无需我在第一次创建它时设置大小,而且,我该如何消除 BorderLayout.CENTER
在我的按钮面板之间占据的巨大差距?
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class calculatorProg extends JFrame implements ActionListener
{
private Container contents;
private JButton add, subtr, mult, div, pow, pow10, b1, b2, b3, b4, b5, b6, b7, b8, b9, b0;
private JTextArea win;
private JPanel numArea, win1, arithArea, numPlusArith;
private JMenu men;
private JMenuItem menItem;
JSplitPane calcPane;
public calculatorProg()
{
super("Calculator");
contents = getContentPane();
setDefaultCloseOperation(EXIT_ON_CLOSE);
contents.setLayout(new BorderLayout());
//Arithmetic buttons
add = new JButton("+");
subtr = new JButton("-");
mult = new JButton("x");
div = new JButton("/");
pow = new JButton("x^");
pow10 = new JButton("x^10");
//Buttons
b1 = new JButton("1");
b5 = new JButton("5");
b2 = new JButton("2");
b6 = new JButton("6");
b3 = new JButton("3");
b7 = new JButton("7");
b4 = new JButton("4");
b8 = new JButton("8");
b9 = new JButton("9");
b0 = new JButton("0");
//Creating the panels
win = new JTextArea(2, 25);
win.setEditable(false);
win.setVisible(true);
win1 = new JPanel();
win1.setLayout(new FlowLayout(FlowLayout.LEFT));
win1.add(win);
numArea = new JPanel(new GridLayout(0, 3));
arithArea = new JPanel(new GridLayout(3, 3));
arithArea.setSize(new Dimension(8, 8));
numPlusArith = new JPanel(new BorderLayout());
//Adding to num area
numArea.add(b1);
numArea.add(b2);
numArea.add(b3);
numArea.add(b4);
numArea.add(b5);
numArea.add(b6);
numArea.add(b7);
numArea.add(b8);
numArea.add(b9);
numArea.add(b0);
arithArea.add(add);
arithArea.add(subtr);
arithArea.add(div);
arithArea.add(mult);
arithArea.add(pow);
arithArea.add(pow10);
numPlusArith.add(arithArea, BorderLayout.LINE_START);
numPlusArith.add(numArea, BorderLayout.LINE_END);
//Lay out the panes
calcPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, win1, numPlusArith);
calcPane.setOneTouchExpandable(true);
calcPane.setDividerLocation(50);
Dimension minimumSize = new Dimension(100, 50);
win1.setMinimumSize(minimumSize);
numArea.setMinimumSize(minimumSize);
//add to contents
contents.add(calcPane, BorderLayout.CENTER);
setSize(320, 370);
setVisible(true);
}
public static void main(String[] args)
{
calculatorProg cp = new calculatorProg();
}
}
有人可能会提到 0 在 numArea
中偏离中心(我在 Java 文档中阅读了关于 GridBagLayout
的内容,但我什至连一半的脚趾甲都没有插入其中水域,但是。)
编辑代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class calculatorProg extends JFrame implements ActionListener {
private Container contents;
private JButton add, subtr, mult, div, pow, pow10, clr, plmi, b1, b2, b3, b4, b5, b6, b7, b8, b9, b0;
private JTextArea win;
private JPanel numArea, win1, arithArea, numPlusArith;
private JMenu men;
private JMenuItem menItem;
JSplitPane calcPane;
public calculatorProg(){
super("Calculator");
contents = getContentPane();
setDefaultCloseOperation(EXIT_ON_CLOSE);
contents.setLayout(new BorderLayout());
//Arithmetic buttons
add = new JButton("+");
subtr = new JButton("-");
mult = new JButton("x");
div = new JButton("/");
pow = new JButton("x^");
pow10 = new JButton("x^10");
//Buttons
b1 = new JButton("1"); b5 = new JButton("5");
b2 = new JButton("2"); b6 = new JButton("6");
b3 = new JButton("3"); b7 = new JButton("7");
b4 = new JButton("4"); b8 = new JButton("8");
b9 = new JButton("9"); b0 = new JButton("0");
clr = new JButton("C"); plmi = new JButton("+/-");
//Creating the panels
win = new JTextArea(2, 25);
win.setLineWrap(true);
win.setWrapStyleWord(true);
win.setEditable(false);
win.setVisible(true);
win1 = new JPanel();
win1.setLayout(new BorderLayout());
win1.add(new JScrollPane(win), BorderLayout.CENTER);
numArea = new JPanel(new GridLayout(0,3));
arithArea = new JPanel(new GridLayout(3, 3));
//arithArea.setSize(new Dimension(8, 8));
numPlusArith = new JPanel(new GridLayout(0, 2, 0, 0));
//Adding to num area
numArea.add(b1); numArea.add(b2);
numArea.add(b3); numArea.add(b4);
numArea.add(b5); numArea.add(b6);
numArea.add(b7); numArea.add(b8);
numArea.add(b9); numArea.add(b0);
numArea.add(clr); numArea.add(plmi);
arithArea.add(add);
arithArea.add(subtr);
arithArea.add(div);
arithArea.add(mult);
arithArea.add(pow);
arithArea.add(pow10);
numPlusArith.add(arithArea);
numPlusArith.add(numArea);
//Lay out the panes
calcPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, win1, numPlusArith);
calcPane.setOneTouchExpandable(true);
calcPane.setDividerLocation(50);
Dimension minimumSize = new Dimension(100, 50);
win1.setMinimumSize(minimumSize);
numArea.setMinimumSize(minimumSize);
//add to contents
contents.add(calcPane, BorderLayout.CENTER);
pack();
setVisible(true);
}
public static void main(String[] args) {
calculatorProg cp = new calculatorProg();
}
private double addition(double a, double b){
a=0.0; b=0.0;
double finAnswer = a + b;
return finAnswer;
}
private double subtraction(double a, double b){
a=0.0; b=0.0;
double finAnswer = a + b;
return finAnswer;
}
private double division(double a, double b){
a=0.0; b=0.0;
double finAnswer = a / b;
return finAnswer;
}
private double multiplication(double a, double b){
a=0.0; b=0.0;
double finAnswer = a * b;
return finAnswer;
}
private double pow(double a, double b){
a=0.0; b=0.0;
double finAnswer = Math.pow(a, b);
return finAnswer;
}
private double pow10(double a){
a = 0.0;
double finAnswer = Math.pow(a, 10);
return finAnswer;
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
}
如您所见,我进行了必要的更改。看起来干净多了。数字区域周围仍然存在微小差距,但它更干净了。 pack()
肯定会有所作为。感谢大家的帮助!
最佳答案
感谢 SSCCE,为此 +1。所缺少的只是 actionPerformed
方法(在最近的编辑之前,您还缺少最后一个 }
)。
无论如何,您的问题是您正在为包含您的JTextArea
的面板使用FlowLayout
。更改这些行:
win1.setLayout(new FlowLayout(FlowLayout.LEFT));
win1.add(win);
为此:
win1.setLayout(new BorderLayout());
win1.add(new JScrollPane(win), BorderLayout.CENTER);
您可能还注意到我将文本区域包裹在滚动 Pane 中。这将使任何文本溢出都可以滚动。您还应该添加以下行以打开换行:
win = new JTextArea(2, 25);
win.setLineWrap(true);
win.setWrapStyleWord(true);
关于java - 如何消除 BorderLayout.CENTER 占用的空隙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18810100/
这个问题在这里已经有了答案: Flexbox: Align between bottom and center? [duplicate] (2 个答案) 关闭 6 年前。 我正在尝试使用 flexb
用于居中元素的标签是 或 ? 我知道 或 标签不再使用,但哪一个是正确的? 我很迷惑。 Visual Studio 代码说 错了,但只有适用于 Microsoft Edge。 编辑:Microsof
我使用的是标准匹配用户界面和两台 iPad iOS6。问题是当我在第一台设备中创建新的匹配项时,第二台设备应该在我查看匹配用户界面时看到现有的匹配项,但事实并非如此。我确定我的代码是正确的。这是方法:
在我的项目的两个不同的类(都扩展 JFrame)中,我尝试这样做: header = new JLabel("Header"); header.setHorizontalAlignme
我已经在我的网站中实现了以下 jQuery 视差效果(取自 http://www.brandaiddesignco.com/insights/parallax-scrolling-made-easy/
每当我在我的 css 中居中文本时,它也会使图像居中。这是为什么?文本位于一个 div(“左”)内,图像位于第二个 div(“右”)内。这是 HTML - BANKS 还有
我现在有这段代码: 1 enE jk 5.6 mtE hp 6.4 hpE eb HML reE pm 514 hpE e
我只是制作一个页面或类似的东西。我想让我的按钮居中,但它不起作用。 我尝试用不同的方法将它居中,但它不起作用。看看代码。它有但它并没有将它置于整个页面的中心但只是喜欢......我不知道。照片:htt
我想知道如何将此页面中的字形居中,它们是使用@font-face 的图标字体,但即使在我将 text-align:center 应用于包含每个字形的 anchor 之后,它们也不是居中。 它们显示为左
考虑以下 HTML 片段, Hyperlink 如上所示,由于“...”标签,所有内容都将居中对齐。但是,我不希望带有“id=three”的 HTML 元素的中心对齐
我有以下 html: Site Map Privacy Policy Terms & Condi
我在将我正在处理的布局中的按钮上的文本居中时遇到问题。请查看下面的屏幕截图(在 eclipse 的“图形布局”选项卡中截取): 我不确定是什么原因造成的。我试着玩弄按钮的各个布局属性,但这没有任何效果
我正在尝试使用 Bootstrap 组装页脚。由于某些原因,尽管确保应用了 text-align: center;,但页脚链接看起来略微偏离中心。有没有办法确保所有文本元素确实正确对齐? HTML
我在使用 flexbox 工具 align-items:center; 时遇到了问题,它在中间并不完美,但文本、图标等的像素太高了……有人知道如何解决这个问题? screenshot how it l
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
GameKit 是否允许您以编程方式邀请特定的 Game Center friend 参加比赛,即不提供 GC ViewController?以下 handleInviteFromGameCenter
我有一个布局问题。 假设我有一个 RelativeLayout 出现在我的屏幕底部。在此,我想添加 2 个 TextView ,一个在中心,一个在顶部中心,一个在底部中心。 |------------
我有一个启动画面的 Activity layout.xml,它基本上显示了我想要的内容。但是如果我在更大或更小的屏幕设备上打开应用程序,它就不再居中了。 有没有办法在元素周围放置一个包装器并将其在屏幕
尝试了几十种方法后,我自己也想不出解决方案 #banner .slide { position: static; top: 0px; left: 0px; z-inde
您将如何修复以下传递过多参数的错误代码? void helper1(int p1, int p3, int p5, int p7, int p9, int p10) { // ... } void
我是一名优秀的程序员,十分优秀!