1

Тема: Графічний інтерфейс Java

Всім доброго дня. Нижче наведений код в якому я хочу вивести кнопку і трикутник. Але чомусь у мене виводить тільки кнопку. Допоможіть будь ласка вирішити цю проблему.   

package project;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.font.TextAttribute;
import java.util.Map;
public class Main extends JFrame
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        frame.setSize(600, 425);
        Color myRed1 = new Color(252, 213, 181);
        frame.getContentPane().setBackground(myRed1);
        frame.setTitle("Lab№6");

        frame.setLayout(null);
        Color myRed2 = new Color(148, 54, 52);
        JButton b1 = new JButton("Далі");
        b1.setBackground(myRed2);
        b1.setBorder(BorderFactory.createLineBorder(new Color(99,37,35)));
        b1.setFocusPainted(false);
        b1.setFont(new Font("Cambria", Font.BOLD, 14));
        b1.setForeground(Color.white);
        b1.setBounds(420, 220, 98, 37);
        frame.add(b1);

        MyCanvas canvas = new MyCanvas();
        frame.add(canvas);

        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    static class MyCanvas extends Canvas
    {
        public void paint(Graphics g)
        {
            int x[]={100,200,300};
            int y[]={100,200,200};
            g.fillPolygon(x,y,3);
        }
    }
}

2

Re: Графічний інтерфейс Java

Кажу зразу - я новачок в Java, тому можу робити елементарні помилки

3

Re: Графічний інтерфейс Java

netbeans

4

Re: Графічний інтерфейс Java

Додайте ще точку у філПолігон, буде вам трикутник

5 Востаннє редагувалося Mirek7098 (28.03.2021 19:01:01)

Re: Графічний інтерфейс Java

Якщо я закоментую нижче наведений код, то мені намалює трикутник
             

frame.setLayout(null);
        Color myRed2 = new Color(148, 54, 52);
        JButton b1 = new JButton("Далі");
        b1.setBackground(myRed2);
        b1.setBorder(BorderFactory.createLineBorder(new Color(99,37,35)));
        b1.setFocusPainted(false);
        b1.setFont(new Font("Cambria", Font.BOLD, 14));
        b1.setForeground(Color.white);
        b1.setBounds(420, 220, 98, 37);
        frame.add(b1);

Але не намалює кнопку

6 Востаннє редагувалося Mirek7098 (28.03.2021 19:49:03)

Re: Графічний інтерфейс Java

А в цьому коді мені малює кнопку і трикутник, але чогось не малює фон вікна(я його задаю кольором myRed1, але мені малює білий фон)

package project;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Point;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.font.TextAttribute;
import java.util.Map;
public class Main
{
    public static void main(String[] args)
    {
        MyFrame frame = new MyFrame();
        frame.setSize(600, 425);
        Color myRed1 = new Color(252, 213, 181);
        frame.getContentPane().setBackground(myRed1);
        frame.setTitle("Lab№6");
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
class MyFrame extends JFrame
{
    public MyFrame()
    {
        setLayout(null);
        Color myRed2 = new Color(148, 54, 52);
        JButton b1 = new JButton("Далі");
        b1.setBackground(myRed2);
        b1.setBorder(BorderFactory.createLineBorder(new Color(99,37,35)));
        b1.setFocusPainted(false);
        b1.setFont(new Font("Cambria", Font.BOLD, 14));
        b1.setForeground(Color.white);
        b1.setBounds(420, 220, 98, 37);
        add(b1);
        repaint();
    }
    public void paint(Graphics g)
    {
        int x[] = {100, 200, 300};
        int y[] = {100, 200, 200};
        g.fillPolygon(x, y, 3);
    }
}

7

Re: Графічний інтерфейс Java

Допоможіть будь ласка виправити проблему

8 Востаннє редагувалося fed_lviv (29.03.2021 22:51:25)

Re: Графічний інтерфейс Java

Mirek7098 написав:

Якщо я закоментую нижче наведений код, то мені намалює трикутник

Аби відображався трикутник та кнопка Вам достатньо закоментувати ось це:

frame.setLayout(null);

Якщо Ви вирішили вивчати Swing то було б добре ознайомитися з LayoutManager A Visual Guide to Layout Managers

Mirek7098 написав:

Але чомусь у мене виводить тільки кнопку

Ось тут можна ознайомитися чому так відбувається Doing Without a Layout Manager (Absolute Positioning), тобто аби отримати очікуваний результат Вам потрібно:

...
Creating a container without a layout manager involves the following steps.

Set the container's layout manager to null by calling setLayout(null).
Call the Component class's setbounds method for each of the container's children.
Call the Component class's repaint method.

...

До Вашого коду можна додати щось такого плану:

canvas.setBounds(...)

або

canvas.setSize(...)

й Ви побачите трикутник (ще при розробці можете задавати якийсь яскравий колір аби відразу був помітний потрібний компонент й візуально бачите його розмір та місце знаходження - canvas.setBackground(...). Інша справа чи дійсно Вам потрібна саме така поведінка...

Mirek7098 написав:

Кажу зразу - я новачок в Java

Можу порекомендувати ось такі книги (якщо Ви дійсно маєте бажання вивчати Swing):
- Swing: A Beginner's Guide
- Java Swing: Эффектные пользовательские интерфейсы

Подякували: Mirek7098, leofun012