
Swingアプリ開発ステップアップガイド
Swing初級から中級者向けに、4つの異なるアプリケーションを段階的に開発する方法を解説します。各アプリケーションは独立しており、難易度順に並んでいます。 ① […]
JFrame frame = new JFrame("My First Swing App"); frame.setVisible(true);
JFrame frame = new JFrame();
frame.setSize(300, 200);
frame.setVisible(true);
JFrame frame = new JFrame();
frame.add(new JLabel("Hello, Swing!"));
frame.setVisible(true);
JButton button = new JButton("Click me");
button.addActionListener(e -> System.out.println("Button clicked!"));
JTextField textField = new JTextField("Enter text here");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setBackground(Color.BLUE);
JLabel label = new JLabel("Text");
label.setForeground(Color.RED);
JButton button = new JButton("Button");
button.setToolTipText("Click me!");
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
frame.add(new JButton("Button 1"));
frame.add(new JButton("Button 2"));
frame.setVisible(true);
class MyPanel extends JPanel {
public MyPanel() {
setBackground(Color.GREEN);
}
}
JTextField textField = new JTextField(20);
JLabel label = new JLabel();
JButton button = new JButton("Update");
button.addActionListener(e -> label.setText(textField.getText()));
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(new JLabel("Label 1"));
panel.add(new JLabel("Label 2"));
panel.add(new JLabel("Label 3"));
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.add(new JLabel("Center"), BorderLayout.CENTER);
frame.setVisible(true);
JPanel redPanel = new JPanel();
redPanel.setBackground(Color.RED);
JPanel bluePanel = new JPanel();
bluePanel.setBackground(Color.BLUE);
JFrame frame = new JFrame();
frame.setLayout(new GridLayout(2, 1));
frame.add(redPanel);
frame.add(bluePanel);
frame.setVisible(true);
button.setEnabled(false);
textField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) { update(); }
public void removeUpdate(DocumentEvent e) { update(); }
public void insertUpdate(DocumentEvent e) { update(); }
private void update() {
label.setText("Length: " + textField.getText().length());
}
});
class CirclePanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawOval(50, 50, 100, 100);
}
}
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);
frame.setJMenuBar(menuBar);
button.addActionListener(e -> {
Color randomColor = new Color(
(int)(Math.random() * 256),
(int)(Math.random() * 256),
(int)(Math.random() * 256)
);
frame.getContentPane().setBackground(randomColor);
});
panel.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
label.setText("X: " + e.getX() + ", Y: " + e.getY());
}
});
textField.setDocument(new PlainDocument() {
@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (getLength() + str.length() <= 10) {
super.insertString(offs, str, a);
}
}
});
button.addActionListener(e -> {
try {
double num1 = Double.parseDouble(textField1.getText());
double num2 = Double.parseDouble(textField2.getText());
resultLabel.setText("Result: " + (num1 + num2));
} catch (NumberFormatException ex) {
resultLabel.setText("Invalid input");
}
});
label.setFont(new Font("Arial", Font.BOLD, 20));
label.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
// ドラッグ開始処理
}
public void mouseReleased(MouseEvent e) {
// ドラッグ終了処理
}
});
label.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
// ラベルの位置を更新
label.setLocation(
label.getX() + e.getX() - label.getWidth()/2,
label.getY() + e.getY() - label.getHeight()/2
);
}
});
class DrawingPanel extends JPanel {
private List points = new ArrayList<>();
public DrawingPanel() {
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
points.add(e.getPoint());
repaint();
}
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
points.add(e.getPoint());
repaint();
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setStroke(new BasicStroke(3));
for (int i = 1; i < points.size(); i++) {
Point p1 = points.get(i-1);
Point p2 = points.get(i);
g2.drawLine(p1.x, p1.y, p2.x, p2.y);
}
}
}
Object[][] data = {
{"1", "Alice"},
{"2", "Bob"},
{"3", "Charlie"}
};
String[] columnNames = {"ID", "Name"};
JTable table = new JTable(data, columnNames);
frame.add(new JScrollPane(table));
JDesktopPane desktop = new JDesktopPane();
frame.setContentPane(desktop);
JInternalFrame internalFrame = new JInternalFrame("Document", true, true, true, true);
internalFrame.setSize(300, 200);
internalFrame.setVisible(true);
desktop.add(internalFrame);
class CircleLayout implements LayoutManager {
@Override
public void layoutContainer(Container parent) {
int radius = Math.min(parent.getWidth(), parent.getHeight()) / 3;
Point center = new Point(parent.getWidth()/2, parent.getHeight()/2);
double angle = 2 * Math.PI / parent.getComponentCount();
for (int i = 0; i < parent.getComponentCount(); i++) {
Component c = parent.getComponent(i);
int x = (int)(center.x + radius * Math.cos(i * angle) - c.getWidth()/2);
int y = (int)(center.y + radius * Math.sin(i * angle) - c.getHeight()/2);
c.setBounds(x, y, c.getPreferredSize().width, c.getPreferredSize().height);
}
}
// 他の必要なメソッドも実装
}
class ObservableModel {
private String data;
private List> listeners = new ArrayList<>();
public void setData(String data) {
this.data = data;
notifyListeners();
}
public void addListener(Consumer listener) {
listeners.add(listener);
}
private void notifyListeners() {
for (Consumer listener : listeners) {
listener.accept(data);
}
}
}
// 使用例
ObservableModel model = new ObservableModel();
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
model.addListener(text -> {
label1.setText(text);
label2.setText(text.toUpperCase());
});
model.setData("Hello");