Я попытался создать JFrame, содержащий 3 элемента, используя Swing в Java 1.6: один - начало страницы, второй - в той же строке с некоторым интервалом слева, третий - на новой строке. Но не удалось после нескольких aproaches:
JFrame: Как сделать простой макет с поведением в стиле строки?
BorderLayout.[SOUTH|WEST|EAST|NORTH]
BorderLayout.[LINE_START|LINE_END|AFTER_LINE_END|AFTER_LAST_LINE]
FlowLayout.LEFT
BoxLayout.[X_AXIS|Y_AXIS]
Единственный способ это отображается правильно было при использовании:
container.add(firstElement, BorderLayout.WEST);
container.add(secondElement, BorderLayout.EAST);
container.add(thirdElement, BorderLayout.SOUTH);
Вот текущая версия моей программы:
import javax.swing.*;
import java.awt.*;
//import java.awt.event.*;
//import java.lang.reflect.*;
public class MainClass {
public static void main(String[] args) {
JFrame frame = new JFrame("JFrame Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container = frame.getContentPane();
JTextField field = new JTextField();
JButton button = new JButton("Enter");
JTextArea outputarea = new JTextArea("Outputtext before input.");
outputarea.setEditable(false);
container.add(field, BoxLayout.X_AXIS);
container.add(button, BoxLayout.X_AXIS);
container.add(outputarea, BoxLayout.Y_AXIS);
field.setPreferredSize(new Dimension(600, 30));
button.setPreferredSize(new Dimension(100, 30));
//button.setMargin(new Insets(0, 10, 0, 0)); //left-margin
outputarea.setPreferredSize(new Dimension(700, 300));
container.setPreferredSize(new Dimension(800, 400));
frame.pack();
frame.setVisible(true);
}
}
В то время как я хочу добиться чего-то вроде этого:
https://dl.dropboxusercontent.com/u/72032667/JFrame_Demo.html
Кислый с:
<!doctype html>
<html lang="en">
<head>
<title>JFrame Demo</title>
<style type="text/css">
body {width:800px; min-height:400px;}
* {float:left; margin:0; color:inherit;}
#input {width:600px;}
#button {margin-left:10px; background:#AAA; padding:2px 5px; border:1px solid black;}
#textarea {width:700px; height:300px; resize:none; white-space:nowrap;}
</style>
<script type="text/javascript">
function myAction() {
var inputElement = document.getElementById('input');
var outputElement = document.getElementById('textarea');
outputElement.innerHTML = myMethod(inputElement.value);
function myMethod(str) {
// Do something more useful than this:
return "You wrote: "+str;
}
}
</script>
</head>
<body>
<input id="input" />
<a href="#" onclick="myAction()"><p id="button">Enter</p></a>
<br>
<textarea id="textarea" readonly spellcheck="false" warp="off"></textarea>
</body>
</html>
Я видел несколько примеров, когда они дают конструктор JFrame компонент в виде аргумента, чтобы выбрать макет, но не понял, как это работает.
EDIT: Я не буду принимать вложенное решение для этих 3 элементов.
* "Я не принимаю вложенную решение этих 3-х элементов" * Могу ли я спросить, почему? Это сделает вещи намного проще (и лучше). Вам просто нужно несколько JPanels с BorderLayouts. –
Что случилось с GridBagLayout или JGoodies FormsLayout? Я предпочитаю последний, поскольку его легче понять и работать. –
@ LuxxMiner Единственная проблема с созданием контейнеров для 2-х элементов вместо 3 - это то, что вы хотите использовать графический интерфейс Swing как инструмент разметки при развертывании приложений, например, в HTML, где рекомендуется использовать _float: left; _ с linebreaks, чтобы сделать его гибким для будущих изменений. –